/*
 * Copyright (c) 2020 - present, Inspur Genersoft Co., Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/*
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.inspur.edp.cef.generator.coreGenerator.base.accessorgen.property;

import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.inspur.edp.caf.generator.baseInfo.AnnotationInfo;
import com.inspur.edp.caf.generator.baseInfo.AnnotationType;
import com.inspur.edp.caf.generator.baseInfo.TypeInfo;
import com.inspur.edp.cef.gencommon.CefPropertyInfo;
import com.inspur.edp.cef.generator.common.MediatePropertyInfo;
import com.inspur.edp.cef.generator.coreGenerator.base.entitygen.EntityGeneratorContext;
import com.inspur.edp.cef.generator.overall.GeneratorUtil;
import com.inspur.edp.cef.spi.jsonser.abstractcefchange.BefDateSerializer;
import com.inspur.edp.cef.spi.jsonser.abstractcefchange.BefDateTimeDeseiralizer;
import java.util.ArrayList;
import java.util.HashMap;
import org.eclipse.jdt.core.dom.Block;
import org.eclipse.jdt.core.dom.Expression;
import org.eclipse.jdt.core.dom.TypeLiteral;

public class AccessorDatePropertyGenerator extends AccessorExplicitPropertyGenerator {
	private String propName;

	public AccessorDatePropertyGenerator(EntityGeneratorContext parContext,MediatePropertyInfo propertyInfo,String nodeCode) {
		this(parContext,propertyInfo,nodeCode, false);
	}

	public AccessorDatePropertyGenerator(EntityGeneratorContext parContext,MediatePropertyInfo propertyInfo,String nodeCode, boolean convertToUpperCase) {
		super(parContext,nodeCode,propertyInfo, convertToUpperCase);
		propName = propertyInfo.getPropertyName();
	}

	public static AccessorDatePropertyGenerator createAccessorDateProperty(
			MediatePropertyInfo propertyInfo,EntityGeneratorContext entityGeneratorContext,String nodeCode) {
		return new AccessorDatePropertyGenerator(entityGeneratorContext,propertyInfo,nodeCode);
	}

	public static AccessorDatePropertyGenerator createAccessorDateProperty(MediatePropertyInfo propertyInfo,EntityGeneratorContext entityGeneratorContext,String nodeCode, boolean convertToUpperCase) {
		return new AccessorDatePropertyGenerator(entityGeneratorContext,propertyInfo,nodeCode, convertToUpperCase);
	}


	@Override
	protected void addBeforeExtendStatements(Block block) {
//		Assignment assignment = ast.newAssignment();
//		String methodName = "getDate";
//		assignment.setRightHandSide(RepositoryGenUtil.createMethodInvocation(ast, RepositoryGenUtil.createVariableLiteral(ast, valueVarName), methodName, null));
//		assignment.setLeftHandSide(RepositoryGenUtil.createVariableLiteral(ast, valueVarName));
//		assignment.setOperator(Assignment.Operator.ASSIGN);
//		block.statements().add(ast.newExpressionStatement(assignment));
	}

//	@Override
//	protected Block buildSetMethodBody() {
//		Block block = ast.newBlock();
//		Assignment assignment = ast.newAssignment();
//		String methodName = "getDate";
//		assignment.setRightHandSide(RepositoryGenUtil.createMethodInvocation(ast, RepositoryGenUtil.createVariableLiteral(ast, valueVarName), methodName, null));
//		assignment.setLeftHandSide(RepositoryGenUtil.createVariableLiteral(ast, valueVarName));
//		assignment.setOperator(Assignment.Operator.ASSIGN);
//		block.statements().add(ast.newExpressionStatement(assignment));
//		block.statements().addAll(super.buildSetMethodBody().statements());
//		return block;
//	}


	@Override
	protected ArrayList<AnnotationInfo> getGetterAttributeList() {
		ArrayList<AnnotationInfo> list = super.getGetterAttributeList();
		if (list == null) {
			list = new ArrayList<>();
		}

		list.add(GeneratorUtil.getBefDateDeserializerAnnoInfo(ast));
		return list;
	}

	@Override
	protected ArrayList<AnnotationInfo> getSetterAttributeList() {
		ArrayList<AnnotationInfo> list = super.getSetterAttributeList();
		if (list == null) {
			list = new ArrayList<>();
		}

		list.add(GeneratorUtil.getBefDateSerializerAnnoInfo(ast));
		return list;
	}
}
